package atomdemo2;

/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2022-08-08
 * Time: 9:40
 */
//我们可以给count++操作添加锁，那么count++操作就是临界区中的代码，临界区中的代码一次只能被
//一个线程去执行，所以count++就变成了原子操作。
public class ThreadAtom implements Runnable{
    //volatile关键字不能保证原子性
    private volatile int count=0;
    private final Object lock=new Object();
    @Override
    public void run() {
        for(int i=0;i<100;i++){
            //1,从共享数据中读取数据到本线程栈中.
            //2,修改本线程栈中变量副本的值
            //3,会把本线程栈中变量副本的值赋值给共享数据.
            
            // count++ 不是一个原子性操作, 他在执行的过程中,有可能被其他线程打断
            synchronized (lock) {
                count++;
                System.out.println("已经送了"+count+"冰淇淋了");
            }
        }
    }
}
